﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using System.Drawing;

namespace ProjetGenGui
{
    public class traitementPdf
    {

        private PdfDocument _pdfDocument;
        private String _fileNameOut;

        public traitementPdf()
        {
            _pdfDocument = new PdfDocument();
        }

        public traitementPdf(String FileNameOut)
        {
            _pdfDocument = new PdfDocument();
            _fileNameOut = FileNameOut;
        }

        //à Continuer
        public Boolean genererFichier(webServiceDecode.ArrayOfAnyType objAEcrire)
        {
            //PdfPage page1, page2, page3;
            PdfFont font1, font2, font3;
            //String contenuPage1 = "", contenuPage2 = "", contenuPage3 = "";
            //List<webServiceDecode.Cl_decode> listDecode;
            try
            {
                font1 = new PdfStandardFont(PdfFontFamily.Helvetica, 9, PdfFontStyle.Regular);
                font3 = font2 = font1;

                foreach (webServiceDecode.Cl_decode decode in objAEcrire)
                {
                    //Page 1 : Nom du fichier, clé la plus probable
                    PdfPage page = _pdfDocument.Pages.Add();
                    PdfPageNumberField number = new PdfPageNumberField();

                    //string contenuPage = decode != null ? decode.text.ToString() : "";
                    page.Graphics.DrawString("Fichier :  " + this.nomFichierSortie.ToString(), font1, PdfBrushes.Blue, new PointF(50, 10));//écrire le nom du fichier sur la page pdf
                    page.Graphics.DrawString("échantillon :  " + decode.enchantillon.ToString(), font1, PdfBrushes.Blue, new PointF(50, 50));//écrire l'échantillon sur la page pdf
                    page.Graphics.DrawString("temps :  " + decode.seconde.ToString(), font1, PdfBrushes.Blue, new PointF(400, 30));//écrire les secondes sur la page pdf
                    page.Graphics.DrawString("langue :  " + decode.langue.ToString(), font1, PdfBrushes.Blue, new PointF(50, 40));
                    page.Graphics.DrawString("Méthode :  " + decode.methode.ToString(), font1, PdfBrushes.Blue, new PointF(50, 30));
                    page.Graphics.DrawString("Pourcentage :  " + decode.pourcent.ToString(), font1, PdfBrushes.Blue, new PointF(400, 20));//écrire le pourcentage sur la page pdf
                    page.Graphics.DrawString("Clé :  " + decode.cle.ToString(), font1, PdfBrushes.Blue, new PointF(400, 10));//écrire la clé sur la page pdf
                    page.Graphics.DrawString(this.decoupeText(decode.text.ToString(),110), font1, PdfBrushes.Black, new PointF(30, 80));//écrire le text sur la page pdf
                    //page.Graphics.DrawString(contenuPage, font1, PdfBrushes.Red, new PointF(50, 50));//écrire sur la page pdf
                    number.Draw(page.Graphics);//écrire le num de page

                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {

            }
        }
        public Boolean genererFichierLocal(webServiceDecode.ArrayOfAnyType objAEcrire)
        {
            //PdfPage page1, page2, page3;
            PdfFont font1, font2, font3;
            //String contenuPage1 = "", contenuPage2 = "", contenuPage3 = "";
            //List<webServiceDecode.Cl_decode> listDecode;
            try
            {
                font1 = new PdfStandardFont(PdfFontFamily.Helvetica, 9, PdfFontStyle.Regular);
                font3 = font2 = font1;

                foreach (Cl_decode decode in objAEcrire)
                {
                    //Page 1 : Nom du fichier, clé la plus probable
                    PdfPage page = _pdfDocument.Pages.Add();
                    PdfPageNumberField number = new PdfPageNumberField();

                    //string contenuPage = decode != null ? decode.text.ToString() : "";
                    page.Graphics.DrawString("Fichier :  " + this.nomFichierSortie.ToString(), font1, PdfBrushes.Blue, new PointF(50, 10));//écrire le nom du fichier sur la page pdf
                    page.Graphics.DrawString("échantillon :  " + decode.enchantillon.ToString(), font1, PdfBrushes.Blue, new PointF(50, 50));//écrire l'échantillon sur la page pdf
                    page.Graphics.DrawString("temps :  " + decode.seconde.ToString(), font1, PdfBrushes.Blue, new PointF(400, 30));//écrire les secondes sur la page pdf
                    page.Graphics.DrawString("langue :  " + decode.langue.ToString(), font1, PdfBrushes.Blue, new PointF(50, 40));
                    page.Graphics.DrawString("Méthode :  " + decode.methode.ToString(), font1, PdfBrushes.Blue, new PointF(50, 30));
                    page.Graphics.DrawString("Pourcentage :  " + decode.pourcent.ToString(), font1, PdfBrushes.Blue, new PointF(400, 20));//écrire le pourcentage sur la page pdf
                    page.Graphics.DrawString("Clé :  " + decode.cle.ToString(), font1, PdfBrushes.Blue, new PointF(400, 10));//écrire la clé sur la page pdf
                    page.Graphics.DrawString(this.decoupeText(decode.text.ToString(), 110), font1, PdfBrushes.Black, new PointF(30, 80));//écrire le text sur la page pdf
                    //page.Graphics.DrawString(contenuPage, font1, PdfBrushes.Red, new PointF(50, 50));//écrire sur la page pdf
                    number.Draw(page.Graphics);//écrire le num de page

                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {

            }
        }
        private string decoupeText(string text, int nbrChar)
        {
            List<string> textDecoupe = new List<string>();
            string ligne="";
            if (text.Length <= nbrChar) { ligne = text+"\r"; }
            else
            {
                string[] mots = text.Split(' ');

                foreach (string mot in mots)
                {
                    ligne += mot + " ";
                    if (ligne.Length >= nbrChar)
                    {
                        ligne += "\r";
                        textDecoupe.Add(ligne);
                        ligne = "";
                    }
                }
                ligne = "";
                foreach (string l in textDecoupe)
                {
                    ligne += l;
                }
            }
            return ligne;
        }
        

        public Boolean sauvegarder()
        {
            try
            {
                if (_pdfDocument != null)
                    _pdfDocument.Save(_fileNameOut);
                _pdfDocument.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public PdfDocument LeDocumentPdf
        {
            get { return _pdfDocument; }
            set { _pdfDocument = value; }
        }

        public String nomFichierSortie
        {
            get { return _fileNameOut; }
            set { _fileNameOut = value; }
        }

    }
}
